/*:
 * @plugindesc (v1.01)圖片預加載
 * @author 小c
 * @version 1.0.1
 * @date 3/4/2020
 *
 * @param Preload Images
 * @text 初始預加載圖片列表
 * @type struct<image>[]
 * @default []
 *
 * @help
 * 預加載圖片，SRD預加載是真的卡爆炸了
 *
 * 插件參數為遊戲啟動時即加載的圖片
 * 其中的【是否在img文件夾】影響路徑
 * 當其為true時，folder的根目錄是img
 * 即 folder值為【system】指向【img/system】
 * 否則folder的根目錄為遊戲根目錄
 * 在這裡可以使得Drill_up的選單背景加載不會有短暫黑屏
 *
 * 你也可以在圖片使用之前才對其進行加載、
 * 插件指令
 * PreloadImage [folder] [name] [hue]
 * folder：圖片路徑文件夾，其根目錄為img
 * name：預加載圖片文件名
 * hue：可選，圖片色相
 * 例：PreloadImage pictures y_1
 * 預加載img/pictures/y_1.png
 *
 * PreloadRootImage [folder] [name] [hue]
 * 指令參數與上面基本相同，但folder的根目錄變為遊戲根目錄
 * 例：PreloadRootImage img/pictures y_1
 * 其作用與上例相同
 *
 * 兩個插件指令可用於多張圖片的連續切換顯示
 *
 * 更新日誌
 * v1.00
 * 插件完成
 *
 * v1.01
 * 修改為reserveBitmap提高性能
 */
/*~struct~image:
 * @param folder
 * @text 圖片文件夾
 * @desc 圖片文件夾
 * @parent Object Selectors
 * 
 * @param name
 * @text 圖片文件名
 * @parent Object Selectors
 *
 * @param hue
 * @text 圖片色相
 * @type number
 * @min 0
 * @max 360
 * @default 0
 * @parent Object Selectors
 *
 * @param isImage
 * @text 是否在img文件夾
 * @type boolean
 * @desc 圖片根目錄是否為img，若為true，文件夾不加img/
 * 讀取非img文件夾下的圖片請設定其為false
 * @default true
 * @parent Object Selectors
 */

var Imported = Imported || {};
Imported.CP_PreLoadImages = true;

var CP = CP || {};
CP.PreLoadImageManager = CP.PreLoadImageManager || {};
CP.PreLoadImageManager.Param = PluginManager.parameters("CP_PreLoadImages");

CP.PreLoadImageManager.PRELOAD_IMAGES = JSON.parse(CP.PreLoadImageManager.Param["Preload Images"]);
for(var i = 0; i < CP.PreLoadImageManager.PRELOAD_IMAGES.length; i++){
	var item = JSON.parse(CP.PreLoadImageManager.PRELOAD_IMAGES[i]);
	item.hue = (Number(item.hue) || 0) % 360;
	item.isImage  = eval(item.isImage);

	CP.PreLoadImageManager.PRELOAD_IMAGES[i] = item;
};

CP.PreLoadImageManager.loadParamImages = function(){
	this.PRELOAD_IMAGES.forEach(function(img){
		this.preLoadImage(img.folder, img.name, img.hue, img.isImage);
	}, this);
};

CP.PreLoadImageManager.preLoadImage = function(folder, filename, hue, isImg){
	var realFolder = folder + "/";
	if(isImg)
		realFolder = "img/" + folder + "/";
    var path = realFolder + encodeURIComponent(filename) + '.png';
    var key = ImageManager._generateCacheKey(path, hue);
    var bitmap = ImageManager._imageCache.get(key);
    if(!bitmap)
        ImageManager.reserveBitmap(realFolder, filename, hue, false, Utils.generateRuntimeId());
};

CP.PreLoadImageManager.loadParamImages();

CP.PreLoadImageManager.PLUGIN_COMMAND = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
    CP.PreLoadImageManager.PLUGIN_COMMAND.call(this, command, args);

    if(command == 'PreloadImage'){
    	var folder = args[0];
    	var filename = args[1];
    	var hue = Number(args[2]) || 0;

    	CP.PreLoadImageManager.preLoadImage(folder, filename, hue, true);
    }

    if(command == 'PreloadRootImage'){
    	var folder = args[0];
    	var filename = args[1];
    	var hue = Number(args[2]) || 0;

    	CP.PreLoadImageManager.preLoadImage(folder, filename, hue, false);
    }
};